﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using DOHS_WM6.Fichas;
using DOHS_WM6.Schemas.Log;

namespace DOHS_WM6.Classes
{
    public static class ControleFormularios
    {
        #region Propriedades
        //Lista dos Formularios das Fichas Selecionadas
        public static List<FormDOHS> Fichas { get; private set; }
        //Indice da atual Ficha Mostrada na tela do usuário
        public static int IndiceFichaSelecionada { get; private set; }

        public static formCabecalho frmCabecalho { get; private set; }
        public static formMenuLevantamento frmMenuLevantamento { get; private set; }

        //Continua Levantamento anterior ou começa um novo levantamento
        private static bool NovoLevantamento { get; set; }
        private static int IndiceLogSelecionado { get; set; }

        //Verifica se e uma nova ficha ou nao
        private static bool NovaFicha { get; set; }
        #endregion

        #region Metodos

        #region Menus

        /// <summary>
        /// Mostra Formulario de Cabecalho e Selecao de Fichas
        /// </summary>
        public static void MostraFormCabecalho()
        {
            NovoLevantamento = true;
            ControleFormularios.frmCabecalho = new formCabecalho(new formSelecaoFicha1(), new formSelecaoFicha2());

            ControleFormularios.frmCabecalho.frmSelecaoFicha2.Show();
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.Show();
            ControleFormularios.frmCabecalho.Show();
        }

        /// <summary>
        /// Mostra Formulario de Cabecalho e Selecao de Fichas carregando dados do Log escolhido
        /// </summary>
        /// <param name="log"></param>
        /// <param name="indiceLog"></param>
        public static void MostraFormCabecalho(LogDOHSLog log, int indiceLog)
        {
            ControleFormularios.IndiceLogSelecionado = indiceLog;

            ControleFormularios.MostraFormCabecalho();
            
            NovoLevantamento = false;

            //Coloca valores nos campos do Formulário de Cabecalho
            ControleFormularios.frmCabecalho.txtCodigoExaminador.Text = log.Cabecalho.CodExaminador;
            ControleFormularios.frmCabecalho.txtLocalizacaoGeografica.Text = log.Cabecalho.LocalizacaoGeografica;
            ControleFormularios.frmCabecalho.txtTipoLocalizacao.Text = log.Cabecalho.TipoLocalizacao;
            ControleFormularios.frmCabecalho.dtpDataExame.Value = Convert.ToDateTime(log.Cabecalho.DataLevantamento);
            //Marca Fichas Selecionadas
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbAvalArtTemporo.Checked = (log.FichasSelecionadas.AvaliacaoArticulacaoTemporoMandibular.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbExameExtraBucal.Checked = (log.FichasSelecionadas.ExameExtraBucal.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbFluoroseDentaria.Checked = (log.FichasSelecionadas.FluoroseDentaria.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbIPC.Checked = (log.FichasSelecionadas.IPC.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbMucosaBucal.Checked = (log.FichasSelecionadas.MucosaBucal.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbOpacidade.Checked = (log.FichasSelecionadas.OpacidadeHipoplasia.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbAnomaliasDentofaciais.Checked = (log.FichasSelecionadas.AnormalidadeDentofacial.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbCondicoesDentarias.Checked = (log.FichasSelecionadas.CondicaoDentaria.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbCondicoesProteticas.Checked = (log.FichasSelecionadas.CondicaoProtetica.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbNecessidadeCuidados.Checked = (log.FichasSelecionadas.NecessidadeCuidado.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbNecessidadeProtese.Checked = (log.FichasSelecionadas.NecessidadeProtese.Equals(ControleDados.TRUE) ? true : false);
            ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbPerdaInsercao.Checked = (log.FichasSelecionadas.PerdaInsercao.Equals(ControleDados.TRUE) ? true : false);
        }

        /// <summary>
        /// Mostra Formulario do Menu Levantamento, Carrega Lista de fichas e fecha formulários anteriores
        /// </summary>
        public static void MostraFormMenuLevantamento()
        {
            try
            {
                ControleDados controleDados = new ControleDados();

                if (NovoLevantamento)
                    controleDados.IniciarLevantamento();
                else
                    controleDados.ContinuarLevantamento(ControleFormularios.IndiceLogSelecionado);

                ControleFormularios.CarregaListaFichas();

                ControleFormularios.frmMenuLevantamento = new formMenuLevantamento();
                ControleFormularios.frmMenuLevantamento.Show();

                ControleFormularios.frmCabecalho.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show("Erro ao Iniciar Levantamento - \n" + e.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        #endregion

        #region Fichas
        public static void MostraFormInformacoesGerais(bool novaFicha)
        {
            //Inicia indice das fichas selecionadas
            ControleFormularios.IndiceFichaSelecionada = 0;

            ControleFormularios.NovaFicha = novaFicha;

            if (NovaFicha)
            {
                //Inicia uma nova Ficha
                ControleDados controleDados = new ControleDados();
                controleDados.NovaFichaDOHS();
            }

            //Mostra Ficha de Informacoes Gerais do paciente
            ControleFormularios.Fichas[ControleFormularios.IndiceFichaSelecionada].MostraFormulario();
        }

        public static void MostraProximaFicha()
        {
            if (ControleFormularios.Fichas.Count.Equals(ControleFormularios.IndiceFichaSelecionada + 1))
            {
                if (MessageBox.Show("Exame Encerrado?", 
                                    "Aviso!", 
                                    MessageBoxButtons.YesNo, 
                                    MessageBoxIcon.Question, 
                                    MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    try
                    {
                        ControleDados controleDados = new ControleDados();
                        controleDados.GravarFichaDOHS(ControleFormularios.NovaFicha);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Erro ao Encerrar Levantamento - \n" + e.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                    finally
                    {
                        ControleFormularios.frmMenuLevantamento.BringToFront();
                    }
                }
            }
            else
                ControleFormularios.Fichas[++ControleFormularios.IndiceFichaSelecionada].MostraFormulario();
        }

        public static void MostraFichaAnterior()
        {
            if (ControleFormularios.IndiceFichaSelecionada - 1 == -1)
            {
                if (MessageBox.Show("Deseja cancelar as alterações na ficha?",
                                    "Aviso!",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question,
                                    MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    ControleFormularios.frmMenuLevantamento.BringToFront();
                }
            }
            else
                ControleFormularios.Fichas[--ControleFormularios.IndiceFichaSelecionada].MostraFormulario();
        }

        /// <summary>
        /// Carrega Lista de Formularios de Fichas que serao preenchidas
        /// </summary>
        public static void CarregaListaFichas()
        {
            ControleFormularios.Fichas = new List<FormDOHS>();
            //Informacoes Gerais
            ControleFormularios.Fichas.Add(new formInformacoesGerais());

            //Exame Extra Bucal
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbExameExtraBucal.Checked)
            {
                ControleFormularios.Fichas.Add(new formExameExtraBucal());
            }
            //Avaliacao da Articulacao Temporo-Mandibular
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbAvalArtTemporo.Checked)
            {
                ControleFormularios.Fichas.Add(new formAvaliacaoArticulacaoTemporoMandibular());
            }
            //Mucosa Bucal
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbMucosaBucal.Checked)
            {
                ControleFormularios.Fichas.Add(new formMucosaBucal());
            }
            //Opacidade Hipoplasia
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbOpacidade.Checked)
            {
                ControleFormularios.Fichas.Add(new formOpacidade());
            }
            //Fluorose Dentaria
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbFluoroseDentaria.Checked)
            {
                ControleFormularios.Fichas.Add(new formFluoroseDentaria());
            }
            //IPC
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha1.chbIPC.Checked)
            {
                ControleFormularios.Fichas.Add(new formIPC());
            }
            //Perda de Insercao
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbPerdaInsercao.Checked)
            {
                ControleFormularios.Fichas.Add(new formPerdaInsercao());
            }
            //Condicao Dentaria
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbCondicoesDentarias.Checked)
            {
                ControleFormularios.Fichas.Add(new formCondicaoDentaria1());
                ControleFormularios.Fichas.Add(new formCondicaoDentaria2());
                ControleFormularios.Fichas.Add(new formCondicaoDentaria3());
                ControleFormularios.Fichas.Add(new formCondicaoDentaria4());
            }
            //Condicoes Proteticas
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbCondicoesProteticas.Checked)
            {
                ControleFormularios.Fichas.Add(new formCondicoesProteticas());
            }
            //Necessidade de Protese
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbNecessidadeProtese.Checked)
            {
                ControleFormularios.Fichas.Add(new formNecessidadeProtese());
            }
            //Anormalidades Dentofaciais
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbAnomaliasDentofaciais.Checked)
            {
                ControleFormularios.Fichas.Add(new formAnomaliasDentofaciais());
            }
            //Necessidade de Cuidados Imediatos
            if (ControleFormularios.frmCabecalho.frmSelecaoFicha2.chbNecessidadeCuidados.Checked)
            {
                ControleFormularios.Fichas.Add(new formNecessidadeCuidados());
            }
            //Mostra Formularios
            foreach (FormDOHS form in ControleFormularios.Fichas)
            {
                form.Show();
            }
            
            ControleFormularios.IndiceFichaSelecionada = 0;
        }

        /// <summary>
        /// Fecha Formularios das fichas
        /// </summary>
        public static void FechaFormFichas()
        {
            foreach (FormDOHS form in ControleFormularios.Fichas)
            {
                form.Close();
            }
        }
        #endregion

        #endregion
    }
}
